package response

import (
	"buding-ai/internal/repository/model"
	"time"
)

// UserVO 用户视图对象
type UserVO struct {
	ID          uint           `json:"id"`                    // 用户ID
	Username    string         `json:"username"`              // 用户名
	Nickname    string         `json:"nickname"`              // 昵称
	Phone       string         `json:"phone"`                 // 手机号
	Email       string         `json:"email"`                 // 邮箱
	Avatar      string         `json:"avatar"`                // 头像
	Role        model.UserRole `json:"role"`                  // 角色
	Status      int            `json:"status"`                // 状态
	CreatedAt   time.Time      `json:"createdAt"`             // 创建时间
	UpdatedAt   time.Time      `json:"updatedAt"`             // 更新时间
	LastLoginAt *time.Time     `json:"lastLoginAt,omitempty"` // 最后登录时间
}

// UserDetailVO 用户详情视图对象
type UserDetailVO struct {
	UserVO
	// 可以在这里添加其他详细信息字段
}

// UserPageVO 用户分页视图对象
type UserPageVO struct {
	Items     []UserVO `json:"items"`     // 用户列表
	Total     int64    `json:"total"`     // 总记录数
	Page      int      `json:"page"`      // 当前页码
	PageSize  int      `json:"pageSize"`  // 每页大小
	TotalPage int      `json:"totalPage"` // 总页数
}

// ToUserVO 将用户领域对象转换为视图对象
func ToUserVO(user model.User) UserVO {
	return UserVO{
		ID:          user.ID,
		Username:    user.Username,
		Nickname:    user.Nickname,
		Phone:       user.Phone,
		Email:       user.Email,
		Avatar:      user.Avatar,
		Role:        user.Role,
		Status:      user.Status,
		CreatedAt:   user.CreatedAt,
		UpdatedAt:   user.UpdatedAt,
		LastLoginAt: user.LastLoginAt,
	}
}

// ToUserVOList 将用户领域对象列表转换为视图对象列表
func ToUserVOList(users []model.User) []UserVO {
	voList := make([]UserVO, len(users))
	for i, user := range users {
		voList[i] = ToUserVO(user)
	}
	return voList
}

// ToUserPageVO 将用户列表转换为分页视图对象
func ToUserPageVO(users []model.User, total int64, page, pageSize int) UserPageVO {
	// 计算总页数
	totalPage := int(total / int64(pageSize))
	if total%int64(pageSize) > 0 {
		totalPage++
	}

	return UserPageVO{
		Items:     ToUserVOList(users),
		Total:     total,
		Page:      page,
		PageSize:  pageSize,
		TotalPage: totalPage,
	}
}
